package LambdaTest;

/**
 * @author ChenYongHao
 * @date 2023/5/4 9:03
 * @desc
 */

/**
 * 引用类方法
 */
interface Converter {
    int convert(String s);
}
/**
 * 引用类的实例方法
 */
interface MyString {
    String mySubString(String s, int x, int y);
}
public class LambdaTest03 {
    public static void main(String[] args) {
        // Lambda写法
        useConverter(s -> Integer.parseInt(s));
        // 引用的方法
        useConverter(Integer::parseInt);


        // Lambda写法
        useMyString((s, x, y) -> s.substring(x, y));
        // 引用的方法
        useMyString(String::substring);

        /**
         * 引用构造器方法
         * 使用说明：Lambda表达式被构造器替代的时候，它的形式参数全部传递给构造器作为参数
         */
        // Lambda写法
        useStudentBuilder((name, age) -> new Student(name, age));
        // 引用的写法
        useStudentBuilder(Student::new);
    }

    private static void useConverter(Converter c) {
        int number = c.convert("666");
        System.out.println(number);
    }

    private static void useMyString(MyString my) {
        String s = my.mySubString("HelloWorld", 2, 5);
        System.out.println(s);
    }

    private static void useStudentBuilder(StudentBuilder sb) {
        Student s = sb.build("林青霞", 30);
        System.out.println(s.getName() + "," + s.getAge());
    }
}

/**
 * 引用构造器方法
 */
class Student {
    private String name;
    private int age;

    public Student() {}

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

interface StudentBuilder {
    Student build(String name, int age);
}
